//package com.ruoyi.common.utils;
//
//import cn.hutool.core.util.StrUtil;
//import com.baidu.aip.face.AipFace;
//import com.baidu.aip.ocr.AipOcr;
//import org.json.JSONArray;
//import org.json.JSONObject;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import java.util.HashMap;
//
//@Component
//public class BaiduUtil {
//
//    @Autowired
//    private AipOcr aipOcrClient;
//
//    @Autowired
//    private AipFace aipFaceClient;
//
//    /**
//     * 身份证照片识别
//     * @param idCardSide
//     * @param file
//     * @return
//     */
//    public JSONObject idCardRecognition(byte[] file) {
//        return idCardRecognition(null, file);
//    }
//
//    public JSONObject idCardRecognition(String idCardSide, byte[] file) {
//        // 传入可选参数调用接口
//        HashMap<String, String> options = new HashMap<String, String>();
//        options.put("detect_direction", "false");
//        options.put("detect_risk", "false");
//
//        if (StrUtil.isBlank(idCardSide)) idCardSide = "front";
//
//        // 参数为本地图片二进制数组
//        JSONObject res = aipOcrClient.idcard(file, idCardSide, options);
//        System.out.println(res.toString(2));
//        return res;
//    }
//
//    public JSONObject checkFaceQuality(byte[] fileByte) {
//        return checkFaceQuality(null, fileByte);
//    }
//
//    public JSONObject checkFaceQuality(String base64Image) {
//        return checkFaceQuality(base64Image, null);
//    }
//
//    public JSONObject checkFaceQuality(String base64Image, byte[] fileByte) {
//        JSONObject res = new JSONObject();
//        res.put("result", false);
//
//        HashMap<String, String> options = new HashMap<String, String>();
//        options.put("face_fields", "qualities");
//        options.put("max_face_num", "1");
//
//        // 人脸检测
//        try {
//            JSONObject response;
//            if (base64Image != null) {
//                response = aipFaceClient.detect(base64Image, options);
//            } else {
//                response = aipFaceClient.detect(fileByte, options);
//            }
//            int faceNum = response.getInt("result_num");
//            if (faceNum <= 0) {
//                res.put("msg", "未检测到人脸");
//            } else if (faceNum > 1) {
//                res.put("msg", "检测到多个人脸，请重新拍摄");
//            } else {
//                JSONArray resultArray = response.getJSONArray("result");
//                JSONObject result = resultArray.getJSONObject(0);
//                JSONObject quality = result.getJSONObject("qualities");
//                Double blur = quality.getDouble("blur");
//                Double illumination = quality.getDouble("illumination");
//                JSONObject occlusion = quality.getJSONObject("occlusion");
//
//                if (blur > 0.6) {
//                    res.put("msg", "拍摄照片模糊，请重新拍摄");
//                } else if (illumination < 40) {
//                    res.put("msg", "拍摄光线过暗，请重新拍摄");
//                } else if (occlusion.getDouble("left_eye") > 0.6 || occlusion.getDouble("right_eye") > 0.6
//                        || occlusion.getDouble("nose") > 0.6 || occlusion.getDouble("mouth") > 0.6
//                        || occlusion.getDouble("left_cheek") > 0.6 || occlusion.getDouble("right_cheek") > 0.6
//                        || occlusion.getDouble("chin") > 0.6) {
//                    res.put("msg", "人脸有部分遮挡，请重新拍摄");
//                } else {
//                    res.put("result", true);
//                }
//            }
//        } catch (Exception e) {
//            res.put("msg", "系统超时，请联系管理员");
//        }
//        return res;
//    }
//
//    public JSONObject faceRegistration(String base64Image, String userId, String groupId, String userInfo) {
//        JSONObject res = new JSONObject();
//        res.put("result", true);
//        // 传入可选参数调用接口
//        HashMap<String, String> options = new HashMap<String, String>();
//        options.put("user_info", userInfo);
//        options.put("quality_control", "NORMAL");
//        options.put("liveness_control", "NORMAL");
//        options.put("action_type", "REPLACE");
//
//        String imageType = "BASE64";
//
//        // 人脸注册
//        JSONObject response = aipFaceClient.addUser(base64Image, imageType, groupId, userId, options);
//        if (response.getInt("error_code") != 0) {
//            res.put("result", false);
//            res.put("code", response.getInt("error_code"));
//            res.put("msg", response.getString("error_msg"));
//        }
//        return res;
//    }
//
//    /**
//     * 人脸照片对比
//     * @param base64Image1
//     * @param base64Image2
//     * @return
//     */
//    public JSONObject faceComparison(byte[] base64Image1, byte[] base64Image2) {
//        JSONObject res = new JSONObject();
//        res.put("result", true);
//
////        JSONObject quality = checkFaceQuality(base64Image2);
//        JSONObject quality = new JSONObject();
//        quality.put("result", true);
//        if (quality.getBoolean("result")) {
//            try {
//                byte[][] images = new byte[][]{base64Image1, base64Image2};
//                HashMap<String, String> options = new HashMap<>();
//                options.put("image_liveness", ",faceliveness");
//                options.put("types", "7,13");
//                JSONObject response = aipFaceClient.match(images, options);
//
//                JSONObject extInfo = response.getJSONObject("ext_info");
//                if (Double.valueOf(extInfo.getString("faceliveness").split(",")[1]) < 0.393241) {
//                    res.put("result", false);
//                    res.put("code", 1);
//                    res.put("msg", "检测人脸非活体，请重新拍摄");
//                } else {
//                    JSONObject result = response.getJSONArray("result").getJSONObject(0);
//                    if (result.getDouble("score") < 70) {
//                        res.put("result", false);
//                        res.put("code", 1);
//                        res.put("msg", "不是本人,请重新拍摄");
//                    }
//                }
//            } catch (Exception e) {
//                e.printStackTrace();
//                res.put("result", false);
//                res.put("code", 99);
//                res.put("msg", "系统超时，请联系管理员");
//            }
//        } else {
//            res.put("result", false);
//            res.put("code", 2);
//            res.put("msg", quality.getString("msg"));
//        }
//
//        return res;
//    }
//}
